#include <REGX52.H>

/*********************************************************************
	方法说明：定时器溢出后，重置定时器时间
	参数：定时/计数次数
	参数：定时器0/1，取值范围：0~1
	返回值：无
*/
void ResetTimer(unsigned int count, unsigned char num)
{
	if(num==0)
	{
		TF0=0;
		TL0= (65536-count)%256;
		TH0= (65536-count)/256;
	}
	else
	{
		TF1=0;
		TL1= (65536-count)%256;
		TH1= (65536-count)/256;
	}
}

/*********************************************************************
	方法：初始化定时器0
	参数：定时/计数次数
	返回值：无
*/
void InitTimer0(unsigned int count)
{
	TMOD&=0xF0;	//TOMD高四位不变，第四位清零
	TMOD|=0x01;	//定时器0方式1
	ResetTimer(count, 0);
	TF0=0;		//TCON寄存器，定时器0溢出标志位清零
	TR0=1;		//TCON寄存器，启动定时器0
	
	ET0=1;		//IE寄存器，定时器0的溢出中断允许控制位
	EA=1;		//IE寄存器，中断允许总开关控制位
	PT0=0;		//IP寄存器，PT0定时器0终端优先级
}

/*********************************************************************
	方法：初始化定时器1
	参数：定时/计数次数
	返回值：无
*/
void InitTimer1(unsigned int count)
{
	TMOD&=0x0F;
	TMOD|=0x10;
	ResetTimer(count, 1);
	TF1=0;
	TR1=1;
	
	ET1=1;
	EA=1;
	PT1=0;
}

/*********************************************************************
	方法：定时器0中断函数
	参数：
	返回值：无
*/
void Timer0Callback() interrupt 1
{
	static unsigned int T0Count;		//静态变量，函数执行完变量不销毁
	ResetTimer(1000, 0);
	T0Count++;
	if(T0Count==1000)
	{
		T0Count=0;
		//do something
		P2_0=~P2_0;
	}
}